| `SEPARATOR` | A divider that separates sections of content or groups of items | #GtkSeparator |
| `SPIN_BUTTON` | A range control that allows seelcting among discrete choices | #GtkSpinButton |
| `SWITCH` | A control that represents on/off values | #GtkSwitch |
+| `TEXT_BOX` | A type of input that allows free-form text as its value. | #GtkEntry |
| `WINDOW` | An application window | #GtkWindow |
| `...` | … |
* applied to the whole text. Note that specifying ranges does not make much
* sense with translatable attributes. Use markup embedded in the translatable
* content instead.
+ *
+ * # Accessibility
+ *
+ * GtkEntry uses the #GTK_ACCESSIBLE_ROLE_TEXT_BOX role.
*/
#define MAX_ICONS 2
GTK_TYPE_ENTRY_ICON_POSITION);
gtk_widget_class_set_css_name (widget_class, I_("entry"));
+ gtk_widget_class_set_accessible_role (widget_class, GTK_ACCESSIBLE_ROLE_TEXT_BOX);
}
static GtkEditable *
GtkEntryPrivate *priv = gtk_entry_get_instance_private (entry);
if (gtk_editable_delegate_set_property (object, prop_id, value, pspec))
- return;
+ {
+ if (prop_id == PROP_EDITING_CANCELED + 1 + GTK_EDITABLE_PROP_EDITABLE)
+ {
+ gtk_accessible_update_property (GTK_ACCESSIBLE (entry),
+ GTK_ACCESSIBLE_PROPERTY_READ_ONLY, !g_value_get_boolean (value),
+ -1);
+ }
+
+ return;
+ }
switch (prop_id)
{
case PROP_ACTIVATES_DEFAULT:
case PROP_TRUNCATE_MULTILINE:
case PROP_OVERWRITE_MODE:
- case PROP_PLACEHOLDER_TEXT:
case PROP_IM_MODULE:
case PROP_INPUT_PURPOSE:
case PROP_INPUT_HINTS:
g_object_set_property (G_OBJECT (priv->text), pspec->name, value);
break;
+ case PROP_PLACEHOLDER_TEXT:
+ gtk_entry_set_placeholder_text (entry, g_value_get_string (value));
+ break;
+
case PROP_HAS_FRAME:
gtk_entry_set_has_frame (entry, g_value_get_boolean (value));
break;
g_return_if_fail (GTK_IS_ENTRY (entry));
gtk_text_set_placeholder_text (GTK_TEXT (priv->text), text);
+
+ gtk_accessible_update_property (GTK_ACCESSIBLE (entry),
+ GTK_ACCESSIBLE_PROPERTY_PLACEHOLDER, text,
+ -1);
}
/**
* @GTK_ACCESSIBLE_ROLE_TABLE: Unused
* @GTK_ACCESSIBLE_ROLE_TAB_LIST: Unused
* @GTK_ACCESSIBLE_ROLE_TAB_PANEL: Unused
- * @GTK_ACCESSIBLE_ROLE_TEXT_BOX: Unused
+ * @GTK_ACCESSIBLE_ROLE_TEXT_BOX: A type of input that allows free-form text
+ * as its value.
* @GTK_ACCESSIBLE_ROLE_TIME: Unused
* @GTK_ACCESSIBLE_ROLE_TIMER: Unused
* @GTK_ACCESSIBLE_ROLE_TOOLBAR: Unused
--- /dev/null
+#include <gtk/gtk.h>
+
+static void
+entry_role (void)
+{
+ GtkWidget *widget = gtk_entry_new ();
+ g_object_ref_sink (widget);
+
+ gtk_test_accessible_assert_role (widget, GTK_ACCESSIBLE_ROLE_TEXT_BOX);
+
+ g_object_unref (widget);
+}
+
+static void
+entry_properties (void)
+{
+ GtkWidget *widget = gtk_entry_new ();
+ g_object_ref_sink (widget);
+
+ gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_PLACEHOLDER, NULL);
+ gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_READ_ONLY, FALSE);
+
+ gtk_entry_set_placeholder_text (GTK_ENTRY (widget), "Hello");
+ gtk_editable_set_editable (GTK_EDITABLE (widget), FALSE);
+
+ gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_PLACEHOLDER, "Hello");
+ gtk_test_accessible_assert_property (widget, GTK_ACCESSIBLE_PROPERTY_READ_ONLY, TRUE);
+
+ g_object_unref (widget);
+}
+
+int
+main (int argc, char *argv[])
+{
+ gtk_test_init (&argc, &argv, NULL);
+
+ g_test_add_func ("/a11y/entry/role", entry_role);
+ g_test_add_func ("/a11y/entry/properties", entry_properties);
+
+ return g_test_run ();
+}
{ 'name': 'button' },
{ 'name': 'checkbutton' },
{ 'name': 'dialog' },
+ { 'name': 'entry' },
{ 'name': 'image' },
{ 'name': 'progressbar' },
{ 'name': 'scrollbar' },